package handlers

import (
	"net/http"
	"os"
	"path/filepath"
	"strings"

	"github.com/gin-gonic/gin"
)

// StaticHandler 处理静态文件的请求
type StaticHandler struct {
	staticPath string
	indexPath  string
}

// NewStaticHandler 创建一个新的静态文件处理器
func NewStaticHandler() *StaticHandler {
	return &StaticHandler{
		staticPath: "internal/interfaces/static/dist",
		indexPath:  "internal/interfaces/static/dist/index.html",
	}
}

// ServeStatic 提供静态文件服务
func (h *StaticHandler) ServeStatic(c *gin.Context) {
	path := c.Request.URL.Path

	// 如果是API请求，跳过静态文件处理
	if strings.HasPrefix(path, "/api/") {
		c.Next()
		return
	}

	// 尝试提供静态文件
	filePath := filepath.Join(h.staticPath, path)
	if _, err := os.Stat(filePath); err == nil {
		c.File(filePath)
		return
	}

	// 如果文件不存在，返回index.html（用于SPA路由）
	c.File(h.indexPath)
}

// HandleNotFound 处理404请求，返回index.html
func (h *StaticHandler) HandleNotFound(c *gin.Context) {
	// 如果是API请求，返回404
	if strings.HasPrefix(c.Request.URL.Path, "/api/") {
		c.JSON(http.StatusNotFound, gin.H{
			"error": "Not Found",
		})
		return
	}

	// 其他请求返回index.html
	c.File(h.indexPath)
}
